//app.js
App({
  onLaunch: function () {
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  },
  globalData: {
    userInfo: null,
    cartFood: [],
    windowHeight:null,
    protocol: "http://",
    host: "192.168.43.112",
    port: 8080,
    token: '',
    base_request:"http://localhost:8080"
    // base_request:"https://www.runze.site/prod-api/"
  },

   /**
  * 封装请求头
  */
 getHeader() {
  var protocol = this.globalData.protocol
  var host = this.globalData.host
  var port = this.globalData.port
  var header = protocol + host + ':' + port
  console.log('header:' + header)
  return header;
},
setToken(token) {
  this.globalData.token = token
},
getToken() {
  return this.globalData.token;
},
// 获取用户信息，需要先登录
getUserInfo() {
  console.log("token:" + this.globalData.token)
  wx.request({
    url: 'https://www.runze.site/prod-api/getInfo',
    method:'GET',
    header:{
      'content-type': 'application/json',
      'Authorization':  this.globalData.token
    },
    success:function(res){
      // console.log("userInfo" + JSON.stringify(res))
      console.log(res.data.permissions)
      console.log(res.data.roles)
      console.log(res.data.user)
    }
  })
},
  /**
  * 设置监听器
  */
  setWatcher(data, watch) { // 接收index.js传过来的data对象和watch对象
    Object.keys(watch).forEach(v => { // 将watch对象内的key遍历
    this.observe(data, v,watch[v]); // 监听data内的v属性，传入watch内对应函数以调用
    })
  },
  
  /**
  * 监听属性 并执行监听函数
  */
  observe(obj, key,watchFun) {
    var val = obj[key]; // 给该属性设默认值
    Object.defineProperty(obj, key, {
    configurable: true,
    enumerable: true,
    set: function(value) {
    val = value;
    watchFun(value,val); // 赋值(set)时，调用对应函数
    },
    get: function() {
    return val;
  }
  })
  },

  // 通过地图拾取
  //获取用户地理位置权限
  // getPermission:function(obj){
  //   wx.chooseLocation({
  //     success: function (res) {    
  //         obj.setData({
  //             addr: res.address      //调用成功直接设置地址
  //         })                
  //     },
  //     fail:function(){
  //         wx.getSetting({
  //             success: function (res) {
  //                 var statu = res.authSetting;
  //                 if (!statu['scope.userLocation']) {
  //                     wx.showModal({
  //                         title: '是否授权当前位置',
  //                         content: '需要获取您的地理位置，请确认授权，否则地图功能将无法使用',
  //                         success: function (tip) {
  //                             if (tip.confirm) {
  //                                 wx.openSetting({
  //                                     success: function (data) {
  //                                         if (data.authSetting["scope.userLocation"] === true) {
  //                                             wx.showToast({
  //                                                 title: '授权成功',
  //                                                 icon: 'success',
  //                                                 duration: 1000
  //                                             })
  //                                             //授权成功之后，再调用chooseLocation选择地方
  //                                             wx.chooseLocation({
  //                                                 success: function(res) {
  //                                                     obj.setData({
  //                                                         addr: res.address
  //                                                     })
  //                                                 },
  //                                             })
  //                                             //申请授权
  //                                           wx.authorize({
  //                                             scope: 'scope.userLocation',
  //                                             success(res) {
  //                                                 console.log("申请获取权限" + res)
  //                                             }
  //                                           })
  //                                         } else {
  //                                             wx.showToast({
  //                                                 title: '授权失败',
  //                                                 icon: 'success',
  //                                                 duration: 1000
  //                                             })
  //                                         }
  //                                     }
  //                                 })
  //                             }
  //                         }
  //                     })
  //                 }
  //             },
  //             fail: function (res) {
  //                 wx.showToast({
  //                     title: '调用授权窗口失败',
  //                     icon: 'success',
  //                     duration: 1000
  //                 })
  //             }
  //         })
  //     }
  // })        
  // },


  // 获取地理位置
  
  getUserLocation: function (obj) {
    let vm = this
    wx.getSetting({
      success: (res) => {
          // res.authSetting['scope.userLocation'] == undefined    表示 初始化进入该页面
          // res.authSetting['scope.userLocation'] == false    表示 非初始化进入该页面,且未授权
          // res.authSetting['scope.userLocation'] == true    表示 地理位置授权
          // 拒绝授权后再次进入重新授权
          if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {
              // console.log('authSetting:status:拒绝授权后再次进入重新授权', res.authSetting['scope.userLocation'])
              wx.showModal({
                  title: '',
                  content: '【社区电商小程序】需要获取你的地理位置，请确认授权',
                  success: function (res) {
                      if (res.cancel) {
                          wx.showToast({
                              title: '拒绝授权',
                              icon: 'none'
                          })
                          setTimeout(() => {
                              wx.navigateBack()
                          }, 1500)
                      } else if (res.confirm) {
                          wx.openSetting({
                              success: function (dataAu) {
                                  // console.log('dataAu:success', dataAu)
                                  if (dataAu.authSetting["scope.userLocation"] == true) {
                                      //再次授权，调用wx.getLocation的API
                                      vm.getLocation(dataAu, obj)
                                  } else {
                                      wx.showToast({
                                          title: '授权失败',
                                          icon: 'none'
                                      })
                                      setTimeout(() => {
                                          wx.navigateBack()
                                      }, 1500)
                                  }
                              }
                          })
                      }
                  }
              })
          }
          // 初始化进入，未授权
          else if (res.authSetting['scope.userLocation'] == undefined) {
              console.log('authSetting:status:初始化进入，未授权', res.authSetting['scope.userLocation'])
              //调用wx.getLocation的API
              vm.getLocation(res, obj)
          }
          // 已授权
          else if (res.authSetting['scope.userLocation']) {
              console.log('authSetting:status:已授权', res.authSetting['scope.userLocation'])
              //调用wx.getLocation的API
              vm.getLocation(res, obj)
          }
      }
  })
  },
  // 微信获得经纬度
  getLocation: function (userLocation, obj) {
    let vm = this
    wx.getLocation({
        type: "wgs84",
        success: function (res) {
            console.log('getLocation:success', res)
            var latitude = res.latitude
            var longitude = res.longitude
            // vm.getDaiShu(latitude, longitude)
            vm.loadCity(longitude, latitude, obj)
        },
        fail: function (res) {
            // console.log('getLocation:fail', res)
            if (res.errMsg === 'getLocation:fail:auth denied') {
                wx.showToast({
                    title: '拒绝授权',
                    icon: 'none'
                })
                setTimeout(() => {
                    wx.navigateBack()
                }, 1500)
                return
            }
            if (!userLocation || !userLocation.authSetting['scope.userLocation']) {
                vm.getUserLocation()
            } else if (userLocation.authSetting['scope.userLocation']) {
                wx.showModal({
                    title: '',
                    content: '请在系统设置中打开定位服务',
                    showCancel: false,
                    success: result => {
                        if (result.confirm) {
                            wx.navigateBack()
                        }
                    }
                })
            } else {
                wx.showToast({
                    title: '授权失败',
                    icon: 'none'
                })
                setTimeout(() => {
                    wx.navigateBack()
                }, 1500)
            }
        }
    })
  },

  //封装REST
  sendGetRequest(url, callback, errFun) {
    var base_url = this.globalData.base_request
    wx.request({
      url: base_url + url,
      method:'GET',
      header:{
        'content-type': 'application/json',
        'Authorization':  this.globalData.token
      },
      success:function(res){
        callback(res.data);
      },
      fail: function(err) {
        errFun(err)
      }
    })
  },

  sendPostRequest(url, data, callback, errFun) {
    var base_url = this.globalData.base_request
    wx.request({
      url: base_url  + url,
      method:'POST',
      data: data,
      header:{
        'content-type': 'application/json',
        'Authorization':  this.globalData.token
      },
      success:function(res){
        callback(res.data);
      },
      fail: function(err) {
        errFun(err)
      }
    })
  },

  sendPutRequest(url, data, callback, errFun) {
    var base_url = this.globalData.base_request
    wx.request({
      url: base_url  + url,
      method:'PUT',
      data: data,
      header:{
        'content-type': 'application/json',
        'Authorization':  this.globalData.token
      },
      success:function(res){
        callback(res.data);
      },
      fail: function(err) {
        errFun(err)
      }
    })
  },

  // 根据经纬度获取实际位置
  loadCity: function (longitude, latitude, obj) {
    // var page = this
    wx.request({
      url: 'http://api.map.baidu.com/reverse_geocoding/v3/?ak=OntSEtwgrKDTbgiZQDTbdU8UZVYkrIPf&output=json&coordtype=wgs84ll&location=' + latitude + ',' + longitude,
        //这里的ak 是去百度地图api获取的需要自己登陆获取一下 地址：https://lbsyun.baidu.com/index.php?title=wxjsapi
      data: {},
      header: {
        'Content-Type': 'application/json'
      },
      success: function (res) {
        // success 
        console.log("返回的地址：" + JSON.stringify(res));
        var position = res.data.result.formatted_address
        var province = res.data.result.addressComponent.province
        var city = res.data.result.addressComponent.city
        var district = res.data.result.addressComponent.district
        obj.setData({ 
          position: position,
          province: province,
          city: city,
          district: district
        })
        obj.data.allCommunity.forEach(item => {
          if(item.name === district){
            obj.setData({ 
              citylist: item.data
            })
          }
        })
      },
      fail: function () {
      // fail 
      },
      complete: function () {
      // complete 
      }
    })
  }
})